C++之extern "C"的含义 | 您所在的位置:网站首页 › linux命令rm -rf失败 › C++之extern "C"的含义 |
extern "C"的含义是编译生成的内部符号名使用C语言的规则。我们需要知道的是,对于不同的编译器,在编译一个函数时,编译出来的函数名称或参数排列的顺序可能是不同的。例如,我们假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的)。那么当我们用一种语言去调用另一种语言函数的时候,,需要告诉编译器去执行不同的编译器调用规则。 extern "C"告诉编译器用C语言的规则去编译调用函数(extern "FORTRAN"告诉编译器用FORTRAN语言的规则去编译调用函数)。extern "C"使用最多的地方是在C++语言中调用自定义C库的函数。将C定义的函数用extern "C"声明,以确保C++程序中调用的C函数是用C语言的规则进行编译的,而不是用C++语言规则编译的。下面举几个简单例子。 1 C++引用C中的函数基本的步骤只有三步: 1)在C文件中定义被调用函数; 2)在CPP文件中使用extern "C"声明该函数; 3)在CPP文件中调用该函数。 代码如下: //hello.c文件 实现hello函数#incl? void hello(){ printf("Hello,C!\n");}//main.cpp文件 调用hello函数#incl? using namespace std; extern "C"{ void hello();}; int main(){ hello(); return 0;}需要说明的是,如果在hello.c文件中加入了extern "C"的话,会出现错误,提示的错误信息是error C2059: syntax error : 'string'。出现这个错误的原因是extern "C"是C++中的关键词,C不支持。还有就是如果去掉了main.cpp中的extern "C"的话,提示的错误信息如下: Error 1 error LNK2019: unresolved external symbol "void __cdecl hello(void)" (?hello@@YAXXZ) referenced in function _main E:\user\Documents\Vis l St io 2010\Projects\test2010\test2010\main.obj 2 C引用C++中的函数基本步骤如下: 1)在CPP文件中使用extern "C"定义被调用函数; 2)在C文件中声明该函数; 3)在C中调用该函数。 代码如下: //main.cpp文件 使用extern "C"定义hello函数#incl? using namespace std; extern "C"{ void hello() { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |